package com.day12_Thread.Getmoney;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @ClassName: Account
 * @Author: zw
 * @Description: 出百万拳，行万里路；
 * @Create 2025/4/5-22:13
 * @Version 1.0
 */

public class Account {
    // 这是一个账户类
    private String accId;
    private double money;

    // 3. 保护锁
    private final Lock lock = new ReentrantLock();// 保护锁
    public Account(String accId, double money) {
        this.accId = accId;
        this.money = money;
    }

    // 2.同步方法 用 synchronized 修饰共享数据的方法
//    public synchronized void getmoney(double money) {
////        synchronized (this) {  // 1. 同步对象
//            if (this.money >= money) {
//                System.out.println("余额充足");
//                System.out.println(Thread.currentThread().getName() + "正在取钱");
//                this.money -= money; // 取钱后更新
//                System.out.println(Thread.currentThread().getName() +"取钱成功，剩余余额：" + this.money);
//            } else {
//                System.out.println("余额不足。");
//
//            }
////        }
//    }

    public  void getmoney(double money) {
        lock.lock();
        try {
            if (this.money >= money) {
                System.out.println("余额充足");
                System.out.println(Thread.currentThread().getName() + "正在取钱");
                this.money -= money; // 取钱后更新
                System.out.println(Thread.currentThread().getName() +"取钱成功，剩余余额：" + this.money);
            } else {
                System.out.println("余额不足。");

            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            lock.unlock();
        }
    }
}
